 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.internal.utils;

 import java.io.UnsupportedEncodingException ;

 public class Convert {

     /**
      * Converts the string argument to a byte array.
      */
     public static String fromUTF8(byte[] b) {
         String result;
         try {
             result = new String (b, "UTF8"); //$NON-NLS-1$
 } catch (UnsupportedEncodingException e) {
             result = new String (b);
         }
         return result;
     }

     /**
      * Converts the string argument to a byte array.
      */
     public static byte[] toUTF8(String s) {
         byte[] result;
         try {
             result = s.getBytes("UTF8"); //$NON-NLS-1$
 } catch (UnsupportedEncodingException e) {
             result = s.getBytes();
         }
         return result;
     }

     /**
      * Performs conversion of a long value to a byte array representation.
      *
      * @see #bytesToLong(byte[])
      */
     public static byte[] longToBytes(long value) {

         // A long value is 8 bytes in length.
 byte[] bytes = new byte[8];

         // Convert and copy value to byte array:
 // -- Cast long to a byte to retrieve least significant byte;
 // -- Left shift long value by 8 bits to isolate next byte to be converted;
 // -- Repeat until all 8 bytes are converted (long = 64 bits).
 // Note: In the byte array, the least significant byte of the long is held in
 // the highest indexed array bucket.

         for (int i = 0; i < bytes.length; i++) {
             bytes[(bytes.length - 1) - i] = (byte) value;
             value >>>= 8;
         }

         return bytes;
     }

     /**
      * Performs conversion of a byte array to a long representation.
      *
      * @see #longToBytes(long)
      */
     public static long bytesToLong(byte[] value) {

         long longValue = 0L;

         // See method convertLongToBytes(long) for algorithm details.
 for (int i = 0; i < value.length; i++) {
             // Left shift has no effect thru first iteration of loop.
 longValue <<= 8;
             longValue ^= value[i] & 0xFF;
         }

         return longValue;
     }
 }

